15|单一职责原则

单一职责原则(SRP)

Single Responsibility Principle(SRP)一个类或者模块只负责完成一个职责。

模块:模块看做比类更加抽象的概念,模块可以看做比类更加粗粒度的代码块,其中包含多个类。

设计准则

  • 不要设计大而全的类
  • 设计粒度小,功能单一的类
  • 一个类包含两个以上业务不相干的功能,应该拆分成功能单一,粒度更细的类

单一职责的判断准则

一个类是否职责单一的判断,是很难拿捏的。

案例

1
2
3
4
5
6
public class UserInfo{
private long userId;
...
private String cityAddress;
private regionOfAddress;
}

UserInfo的设计是否满足单一职责原则?这个问题不能脱离实际的应用场景

  1. 满足单一职责原则—用户的地址信息和其他信息一样都是用作展示。
  2. 不满足单一职责原则—如果用户的地址信息需要用其他用途,如电商物流中,则需要把用户的地址信息拆分出来。

没有非常明确的、可以量化的标准来判定一个类是否足够单一。所以我们在开发工作中,没必要过度设计。我们可以先设计粗粒度的类,随着业务发展,可以将粗粒度的类拆分成几个细粒度的类。

判断准则

  • 类中代码行数、函数或属性较多,影响了代码的可读性和可维护性。
  • 类依赖的其他类过多,不符合高内聚、低耦合的设计思想
  • 私有方法过多,考虑将私有方法独立到新的类,设置为public。
  • 很难讲类起一个合适的名字,难以用一个业务名词来概括。

最终目的是提高代码的可读性、可扩展性、复用性、可维护性,所以无论是应用那种设计原则或者设计模式,都应该一次作为考量标准。